#!/usr/bin/env python
# -*- coding: utf-8 -*-

'''
# ----------------------------------------------------------------------------
#  Purpose:     用于实现获取系统信息

#  Author:      青衫少年春归也

#  Created:     2019.12.26

# ----------------------------------------------------------------------------
'''


import time
import psutil
import datetime


class SystemInfo():
    def get_cpu_info(self) -> dict:
        """
        获取系统CPU信息
        返回值：
            :return:
                cpu_num： CPU数目
                cpu：CPU利用率
        """
        cpu_num = psutil.cpu_count(logical=False)
        cpu_percent = (str(psutil.cpu_percent(1))) + '%'
        data = dict(cpu_num= cpu_num, cpu_percent=cpu_percent)
        return data

    def get_memory_info(self) -> dict:
        """
        获取系统内存信息
        返回值：
            :return:
                total： 内存总量
                used：已使用的内存大小
                free: 空余内存大小
                memory_percent:内存使用率
        """
        total = str(round(psutil.virtual_memory().total / (1024.0 * 1024.0 * 1024.0), 2)) + 'G'
        total_used = str(round(psutil.virtual_memory().used / (1024.0 * 1024.0 * 1024.0), 2)) + 'G'
        total_free = str(round(psutil.virtual_memory().free / (1024.0 * 1024.0 * 1024.0), 2)) + 'G'
        memory = str(psutil.virtual_memory().percent) + '%'
        data = dict(total= total, used=total_used, free=total_free, memory_percent=memory)
        return data

    def get_network_counters(self) -> dict:
        """
        获取系统网卡信息
        返回值：
            :return:
                bytes_sent： 发出的字节数
                bytes_rcvd：接收到的字节数
        """
        net = psutil.net_io_counters()
        bytes_sent = '{0:.2f} Mb'.format(net.bytes_recv / 1024 / 1024)
        bytes_rcvd =  '{0:.2f} Mb'.format(net.bytes_sent / 1024 / 1024)
        data = dict(bytes_sent= bytes_sent, bytes_rcvd=bytes_rcvd)
        return data

    def get_disk_partitions(self) -> list:
        """
        获取系统磁盘信息
        返回值：
            :return:
                name： 盘符
                total：磁盘总量
                used： 已使用空间
                free： 空闲空间
        """
        data = []
        io = psutil.disk_partitions()
        for i in io:
            pan = i[0][0][0]
            o = psutil.disk_usage(i.device)
            disk=str(int(o.total / (1024.0 * 1024.0 * 1024.0))) + "G"
            disk_use=str(int(o.used / (1024.0 * 1024.0 * 1024.0))) + "G"
            disk_free=str(int(o.free / (1024.0 * 1024.0 * 1024.0))) + "G"
            data.append({"name": pan, "total":disk, "used":disk_use, "free":disk_free})
        return data

    def get_system_info(self) -> dict:
        """
        获取系统信息
        返回值：
            :return:
                user：当前用户名
                ip_addr：当前ip地址
                now_time： 系统当前时间
                start_time： 系统开机时间
        """
        now_time =time.strftime('%Y-%m-%d-%H:%M:%S', time.localtime(time.time()))
        start_time =datetime.datetime.fromtimestamp(psutil.boot_time()).strftime("%Y-%m-%d %H: %M: %S")
        date= dict(user=str(psutil.users()[0][0]), ip_addr=str(psutil.users()[0][2]), now_time=now_time,  start_time=start_time)
        return date

